package com.photography.common;

/**
 * 通用响应结果类
 */
public class Result {
    private static final String SUCCESS = "0";
    private static final String ERROR = "-1";
    private String code;
    private String msg;

    private Object data;

    /**
     * 返回成功结果
     *
     * @return Result对象
     */
    public static Result success() {
        Result result = new Result();
        result.setCode(SUCCESS);
        return result;
    }

    /**
     * 返回带数据的成功结果
     *
     * @param data 响应数据
     * @return Result对象
     */
    public static Result success(Object data) {
        Result result = new Result();
        result.setCode(SUCCESS);
        result.setData(data);
        return result;
    }

    /**
     * 返回带消息的成功结果
     *
     * @param msg 成功消息
     * @return Result对象
     */
    public static Result successWithMsg(String msg) {
        Result result = new Result();
        result.setCode(SUCCESS);
        result.setMsg(msg);
        return result;
    }

    /**
     * 返回带数据和消息的成功结果
     *
     * @param data 响应数据
     * @param msg 成功消息
     * @return Result对象
     */
    public static Result success(Object data, String msg) {
        Result result = new Result();
        result.setCode(SUCCESS);
        result.setData(data);
        result.setMsg(msg);
        return result;
    }

    /**
     * 返回错误结果
     *
     * @param msg 错误消息
     * @return Result对象
     */
    public static Result error(String msg) {
        Result result = new Result();
        result.setCode(ERROR);
        result.setMsg(msg);
        return result;
    }

    /**
     * 返回自定义错误码的错误结果
     *
     * @param msg 错误消息
     * @param code 错误码
     * @return Result对象
     */
    public static Result error(String msg, String code) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }

    /**
     * 设置错误码（链式调用）
     *
     * @param code 错误码
     * @return Result对象
     */
    public Result setCode(String code) {
        this.code = code;
        return this;
    }

    /**
     * 设置消息（链式调用）
     *
     * @param msg 消息
     * @return Result对象
     */
    public Result setMsg(String msg) {
        this.msg = msg;
        return this;
    }

    /**
     * 设置数据（链式调用）
     *
     * @param data 数据
     * @return Result对象
     */
    public Result setData(Object data) {
        this.data = data;
        return this;
    }



    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public Object getData() {
        return data;
    }

    /**
     * 判断结果是否成功
     * @return 如果状态码为 SUCCESS 则返回 true，否则返回 false
     */
    public boolean isSuccess() {
        return SUCCESS.equals(this.code);
    }
}
